<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>原型链属性问题</title>
</head>

<body>
    <!-- 
        1. 读取对象的属性值时：会自动到原型链中查找
        2. 设置对象的属性值时：不会查找原型链，如果当前对象中没有此属性，直接添加此属性并设置其值
        3. 方法一般定义在原型中，属性一般通过构造函数定义在对象本身上
     -->
    <script>
        function Fn() {

        }
        // 给原型添加一个a属性
        Fn.prototype.a = 'lucky'
        let fn1 = new Fn()
        console.log(fn1.a, fn1)

        let fn2 = new Fn()
        fn2.a = 'break a leg'
        console.log(fn1.a, fn2.a, fn2)
        function Person (name, age) {
            this.name = name
            this.age = age
        }
        Person.prototype.setName = function (name) {
            this.name = name
        }
        // p1和p2的__proto__是相同的，都指向构造函数的显式原型（都是Person的构造函数指向的显式原型）
        let p1 = new Person('Beauty', 21)
        p1.setName('Little Beauty')
        console.log(p1)
        let p2 = new Person('Beauty', 21)
        p2.setName('Little Beauty')
        console.log(p2)
        console.log(p1.__proto__ === p2.__proto__)
    </script>
</body>

</html>